package com.weaving.monitor.mapper;

import com.weaving.monitor.entity.StaffUserOnboard;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 员工上机记录数据访问层接口
 * 
 * 功能说明：
 * 1. 定义与staff_user_onboard表交互的数据库操作方法
 * 2. 提供根据机台ID和时间范围查询员工上机记录的功能
 * 
 * 注解说明：
 * - @Mapper: MyBatis注解，标识这是一个Mapper接口
 * 
 * 方法说明：
 * - selectByMachineIdAndTimeRange: 根据机台ID和时间范围查询员工上机记录
 * 
 * @author 系统开发团队
 * @version 1.0
 * @since 2024-01-01
 */
@Mapper
public interface StaffUserOnboardMapper {
    
    /**
     * 根据机台ID和时间范围查询员工上机记录
     * 
     * 功能说明：
     * 1. 查询指定机台在指定时间范围内的员工上机记录
     * 2. 用于生成TimeData数据，显示员工工作时间
     * 
     * 查询逻辑：
     * 1. 根据机台ID筛选记录
     * 2. 根据时间范围筛选记录（上机时间在startDate之后，下机时间在endDate之前或为null）
     * 3. 返回包含用户ID、上机时间、下机时间的记录列表
     * 
     * 参数说明：
     * - machineId: 机台ID，如J001
     * - startDate: 开始时间
     * - endDate: 结束时间
     * 
     * 返回值说明：
     * - List<StaffUserOnboard>: 员工上机记录列表
     * 
     * SQL说明：
     * - 查询条件：machine_id=#{machineId} AND get_on_time >= #{startDate} AND (get_off_time <= #{endDate} OR get_off_time IS NULL)
     * - 返回字段：id, user_id, machine_id, get_on_time, get_off_time
     * 
     * @param machineId 机台ID
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 员工上机记录列表
     */
    List<StaffUserOnboard> selectByMachineIdAndTimeRange(
        @Param("machineId") String machineId,
        @Param("startDate") Date startDate,
        @Param("endDate") Date endDate
    );
}
